package org.lestr.secuel.m3ds.importation.univers;

import java.io.File;
import java.util.Hashtable;

import org.lestr.secuel.m3ds.Univers;
import org.lestr.secuel.m3ds.IUsine;


public class UniversImportateurs {

	
	// Variables statiques
	private static UniversImportateurs singleton;
	
	
	/** Retourne le singleton */
	public static synchronized UniversImportateurs getSingleton(){
	
		// Initialise le singleton si besoin
		if(singleton == null){
			
			// Instanciation
			singleton = new UniversImportateurs();
			
			// Ajout des importateurs
			singleton.ajoutImportateur(new Scene3DSImportateur());
			
		}
		
		// Retourne le singleton
		return singleton;
		
	}// FIN retSingleton
	
	
	// Déclaration des attributs
	private Hashtable<String, UniversImportateur> importateurs;
	
	
	/** Constructeur privé (patron singleton) */
	private UniversImportateurs(){
		
		// Instanciation des attributs
		importateurs = new Hashtable<String, UniversImportateur>();
		
	}// FIN Constructeur
	
	
	/** Ajoute un importateur d'image */
	public void ajoutImportateur(UniversImportateur importateur){
		
		importateurs.put(importateur.getFormatExtension(), importateur);
		
	}// FIN ajoutImportateur
	
	
	/** Retourne le liste des extensions importées */
	public Iterable<String> getFormatsExtensions(){
		
		return importateurs.keySet();
		
	}// FIN retFormatsExtensions
	
	
	/** Importe les objets 3D d'un fichier */
	public Iterable<Univers> importer(File fichier, IUsine usine) throws UniversImportException {
		
		// Récupère l'extension
		String extension = fichier.getName();
		if(extension.lastIndexOf(".") != 0 && extension.lastIndexOf(".") + 1 <= extension.length() - 1)
			extension = extension.substring(extension.lastIndexOf(".") + 1);
		else
			throw(new UniversImportException());
		
		// S'il y a un importateur existant
		if(importateurs.containsKey(extension)){
			
			// Importe le fichier
			return importateurs.get(extension).importer(fichier, usine);
			
		}
		else
			throw(new UniversImportException());
		
	}// FIN importer
	
	
}// FIN Classe
